#得到图像的相位谱后，进行一个随机的扰动再映射回去
import numpy as np
import matplotlib.pyplot as plt
from PIL import Image

# 加载图像并转为灰度
img = Image.open('D:\\2D-DFT\image\\testhaze1.png').convert('L')
img = np.array(img, dtype=np.float32)

# 傅里叶变换
f = np.fft.fft2(img)
magnitude = np.abs(f)
phase = np.angle(f)

# 扰动相位：加上 [-π, π] 范围内的随机角度
random_phase = np.random.uniform(-np.pi, np.pi, size=phase.shape)
perturbed_phase = phase + random_phase

# 构造新频域数据：原幅度 + 扰动相位
f_perturbed = magnitude * np.exp(1j * perturbed_phase)

# 逆变换回图像
img_new = np.fft.ifft2(f_perturbed)
img_new = np.real(img_new)
img_new = np.clip(img_new, 0, 255).astype(np.uint8)

# 显示对比图
plt.figure(figsize=(10, 4))
plt.subplot(1, 2, 1)
plt.title("Original Image")
plt.imshow(img, cmap='gray')
plt.axis('off')

plt.subplot(1, 2, 2)
plt.title("Randomized Phase (Preserve Magnitude)")
plt.imshow(img_new, cmap='gray')
plt.axis('off')

plt.tight_layout()
plt.show()
